<?php

/**
 * Модель работы с формами
 */
class FormsModel extends DbModel {

    protected $_name = 'forms';

    /**
     * Получение Форм/Формы
     *
     * @param int $id #ID Формы
     * @return mixed
     */
    public function getForms($id = 0) {
        $select = $this->select();
        if ($id > 0) {
            $select->where('id = ?', $id);
            $row = $this->fetchRow($select);
            $res = $row->toArray();
        } else {
            $res = $this->fetchAll($select->order('title ASC'));
        }
        return $res;
    }

    /**
     * Получение списка форм
     *
     * @return array #ID => Имя
     */
    public function getFormsList() {
        $select = $this->select()->from(PREFIX . $this->_name, array('id', 'title'));
        $res = $this->_db->fetchPairs($select->order('title ASC'));
        return $res;
    }

    /*
     * Получения списка значений для полей типа select и т.д.
     *
     * @param  string $table Таблица БД
     * @param  string $field Поле таблицы
     * @param  string $where Запрос критерия выборки
     * @param  string $order Запрос сортировки
     * 
     * @return array
     */

    public function getList($table, $field, $where = '', $order = '') {
        $select = $this->_db->select()->from($table, array('id', $field));
        if ($where <> '')
            $select->where($where);
        if ($order <> '')
            $select->order($order);
        $res = $this->_db->fetchPairs($select);
        return $res;
    }

    /**
     * Получение полей/поля формы
     *
     * @param int $fid #ID формы
     * @param int $id #ID поля
     * @return mixed
     */
    public function getFields($fid = 0, $id = 0) {
        $select = $this->_db->select()->from(PREFIX . 'forms_fields')->where('fid = ?', $fid);
        if ($id > 0) {
            $select->where('id = ?', $id);
            $row = $this->_db->fetchRow($select);
            $res = (array) $row;
            return $res;
        } else {
            $res = $this->_db->fetchAll($select->order('position ASC'));
            return $res;
        }
    }

    /**
     * Обновление данных формы
     *
     * @param array $data Данные формы
     * @param int $id #ID формы
     * @return int #ID формы
     */
    public function updateForm($data, $id) {
        if ($id > 0) {
            $this->update($data, "id = " . $id);
        } else {
            $this->insert($data);
            $id = $this->_db->lastInsertId();
        }
        return $id;
    }

    /**
     * Обновленеи свойств поля
     *
     * @param array $data Данные поля
     * @param int $id #ID поля
     * @return int #ID поля
     */
    public function updateField($data, $id) {
        if ($id > 0) {
            $this->_db->update(PREFIX . 'forms_fields', $data, "id = " . $id);
        } else {
            $this->_db->insert(PREFIX . 'forms_fields', $data);
            $id = $this->_db->lastInsertId();
        }
        return $id;
    }

    /**
     * Удаление поля по ID
     *
     * @param int $id #ID поля
     */
    public function deleteField($id) {
        if ($id > 0) {
            $this->_db->delete(PREFIX . 'forms_fields', "id = " . $id);
        }
    }

    /**
     * Удаленеи формы по ID
     *
     * @param int $id #ID формы
     */
    public function deleteForm($id) {
        if ($id > 0) {
            $this->_db->delete(PREFIX . 'forms_fields', "fid = " . $id);
            $this->delete("id = " . $id);
        }
    }

}